home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / snakeoil.lqr / SNAKEOIL.C < prev    next >
Text File  |  1985-07-06  |  4KB  |  139 lines

  1. /**************************************************************************
  2.  Karl L. Remmler                                  (CI-C86)
  3.  
  4.          snakeoil.c  -  filter progam, an example of file I/O
  5.  
  6.                   Copyright (c) 1984 by Karl L. Remmler
  7.                  Not for commercial profit or use.
  8.  
  9. A simple filter to convert document type files to non-document type
  10. files.     This is accomplished by clearing BIT #7 (MSB) of all char-
  11. acters and blocking all control characters, except horizontal tab,
  12. line feed,  form feed and carriage return (HEX 09, 0A, 0C and 0D).
  13.  
  14. APPLICATIONS:
  15.       (1) Condition downloaded files from Micronet for editing.
  16.       (2) Convert Wordstar document files to non-document files.
  17.       (3) Transfer of files between different editors and word
  18.           processors.
  19.       (4) File conditioning for different compilers.
  20.  
  21. ***************************************************************************/
  22.  
  23. #include "stdio.h"
  24. #include "ibm.h"
  25.  
  26. #define VERSION bdos(9,"Ver H.0000$")
  27. #define YES    1
  28. #define NO    0
  29. #define SP    '\040'
  30. #define BEL    putchar('\007')
  31. #define US    31
  32. #define HT    9
  33. #define LF    10
  34. #define FF    12
  35. #define CR    13
  36.  
  37. backup(s,temp)
  38. char *s;
  39. char *temp;
  40. {
  41.     int i, j;
  42.     char *t;
  43.     t = ".BAK";
  44.     i = j = 0;
  45.  
  46.     while (s[i] != '.' && i<11 && s[i] != '\0') {
  47.        temp[i] = s[i];
  48.        i++;
  49.     }
  50.     do temp[i++] = t[j++];
  51.     while (t[j] != '\0');
  52.     temp[i] = '\0';
  53.     unlink(temp); /* . . . . . . if you don't, you may be surprised */
  54.     if(rename(s,temp) < NO) {
  55.        BEL;
  56.        printf("A backup file cannot be created\n");
  57.        exit(0);
  58.     }
  59.     return(0);
  60. } /* end of function backup */
  61.  
  62. main(argc, argv)
  63. int argc;
  64. char *argv[];
  65. {
  66.    FILE *fopen(), *fp1, *fp2;
  67.  
  68.    char *temp;    /*  . . . . . . . . . . . . . . . . backup filename */
  69.    int ln;    /*  . . . . . . . . . . . . . . . . . . line number */
  70.    int c;    /* declare as int so that "getc" will recognize EOF */
  71.    char answ;
  72.    ln = 0;
  73.  
  74. /* Instructions for user and some pretty screen friendliness */
  75.  
  76.    CLS;
  77.    locate(23,17);
  78.    bdos(9,"Copyright (C) 1984 by EIGENWARE TECHNOLOGIES$");
  79.    locate(2,34);
  80.    printf(" SNAKEOIL ");
  81.    locate(3,34);
  82.    VERSION;
  83.    if (argc != 2) {
  84.       printf("\nUSAGE: A>IBMEX29 FILENAME<CR>\n");
  85.       BEL; exit(0);
  86.    }
  87.  
  88. /* create backup file */
  89.  
  90.    temp = "B:DUMMMMY.BAK";
  91.    backup(argv[1],temp);
  92.  
  93. /* open files, error checks and messages */
  94.  
  95.    if ((fp1 = fopen(temp, "r")) == NO) {
  96.        printf("Cannot open a backup file\n");
  97.        BEL;
  98.        rename(temp, argv[1]);
  99.        exit(0);
  100.    }
  101.    if ((fp2 = fopen(argv[1], "w")) == NO) {
  102.     printf("Cannot create a filtered file");
  103.     BEL;
  104.     exit(0);
  105.    }
  106. /* Add more checks and messages as desired, e.g. if file already
  107.    exists, should you overwrite?
  108. */
  109.  
  110. /* Now let's get the job done */
  111.  
  112.    printf("\n\n\t\t A backup file %s has been created.", temp);
  113.    while ((c = getc(fp1)) != EOF && c != AEOF) {
  114.        if (c > US || c == HT || c == LF || c == FF || c == CR) {
  115.           if( c == LF ) {
  116.          locate(9,18);
  117.          printf("Lines through number %d", ++ln);
  118.          printf(" have been processed.");
  119.           }
  120.           c = c & 0177;
  121.           if (putc(c,fp2) == NO) {
  122.           printf("Write error; disk may be full\n");
  123.           BEL;
  124.           exit(0);
  125.           }
  126.        }
  127.    }
  128.    putc(AEOF,fp2); /* . . make sure a ^Z is appended to output file */
  129.    fclose(fp1);
  130.    fclose(fp2);
  131.    answ = 'N';
  132.    printf("\n\n\n\t\t     A  new %s has been created.", argv[1]);
  133.    printf("\n\n\t\t Do you wish to erase %s (Y or N)? ", temp);
  134.    answ = bdos(1,0);
  135.    if (answ == 'Y' || answ == 'y') unlink(temp);
  136.    BEL;
  137.    exit(0);
  138. } /* end of main */
  139.